#include "hilodeentrada.h"
#include "JuegoServerImp.h"
#include "FabricaDeJugadores.h"
#include "imsgent.h"

namespace red {
namespace hilos {

HiloDeEntrada::HiloDeEntrada(Socket *p_pSocket, JuegoServerImp* juego, Mutex* mutex_juego) :
	m_iNroCliente(0)
{
	this->jugador = juego->getFabricaDeJugadores()->crearJugador(p_pSocket);
	this->m_Protocolo = new Protocolo(p_pSocket,juego,jugador,mutex_juego);
	static int t_iNroCliente = 0;

	this->m_iNroCliente = t_iNroCliente++;

	this->m_Mutex.lock();
	this->m_bTerminar = false;
	this->m_Mutex.unlock();

}

Jugador* HiloDeEntrada::getJugador() {
	return jugador;
}

HiloDeEntrada::~HiloDeEntrada() {
	this->join();
	delete this->m_Protocolo;
	delete this->jugador;
}

void HiloDeEntrada::terminar() {

	this->m_Mutex.lock();
	this->m_bTerminar = true;
	this->m_Mutex.unlock();
}

/**Se lanza el hilo que recibe los mensajes del cliente. Corre hasta que recibe la señal de terminar
 * desde el servidor.*/
void HiloDeEntrada::run() {

	bool t_bTerminar = false;

	this->m_Mutex.lock();
	t_bTerminar = this->m_bTerminar;
	this->m_Mutex.unlock();

	while (!t_bTerminar) {

		this->m_Protocolo->bRecibirMensaje();

		this->m_Mutex.lock();
		t_bTerminar = m_bTerminar;
		this->m_Mutex.unlock();
	}
}

}
}
